﻿using System.Collections.Generic;
using CTS.Com.Domain.Constants;
using CTS.Com.Domain.Helper;
using CTS.Data.APStorageFiles.Domain.Utils;
using CTS.W._150101.Models.Domain.Common.Constants;
using CTS.W._150101.Models.Domain.Dao.Client;
using CTS.W._150101.Models.Domain.Model.Client.Items.Detail;
using CTS.W._150101.Models.Domain.Object.Client;

namespace CTS.W._150101.Models.Domain.Logic.Client.Items.Detail
{
    public class InitLogic
    {
        #region Execute Method
        /// <summary>
        /// Xử lý init.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        /// <returns>DataModel</returns>
        public InitDataModel Execute(InitDataModel inputObject)
        {
            // Kiểm tra thông tin
            Check(inputObject);
            // Lấy thông tin
            var resultObject = GetInfo(inputObject);
            // Kết quả trả về
            return resultObject;
        }
        #endregion

        #region Private Method
        /// <summary>
        /// Kiểm tra thông tin.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        private void Check(InitDataModel inputObject)
        {
        }

        /// <summary>
        /// Lấy thông tin.
        /// </summary>
        /// <param name="inputObject">DataModel</param>
        /// <returns>DataModel</returns>
        private InitDataModel GetInfo(InitDataModel inputObject)
        {
            // Khởi tạo biến cục bộ
            var getResult = new InitDataModel();
            var processDao = new ItemsDetailDao();
            var storageFileCom = new StorageFileCom();
            var listDataExemplar = new List<ItemObject>();
            var listDataRelated = new List<ItemObject>();
            // Map dữ liệu
            DataHelper.CopyObject(inputObject, getResult);
            // Lấy thông tin sản phẩm
            var dataInfo = processDao.GetInfo(Logics.LOCALE_DEFAULT, inputObject.ItemName);
            // Trường hợp không tìm thấy sản phẩm
            if (dataInfo == null) {
                // Gán message
                getResult.Messages.Add(MessageHelper.GetMessage("I_MSG_00008"));
                // Kết quả trả về
                return getResult;
            }
            // Lấy tên file
            dataInfo.ItemImage = storageFileCom.GetFileName(
                    Logics.LOCALE_DEFAULT,
                    dataInfo.FileCd,
                    false);
            // Lấy danh sách cùng mẫu
            var listExemplar = processDao.GetListExemplar(Logics.LOCALE_DEFAULT, dataInfo.ItemCd, dataInfo.ExemplarCd);
            // Khai báo biến dùng trong loop
            ItemObject exemplarInfo = null;
            // Duyệt danh sách cùng mẫu
            foreach (var item in listExemplar) {
                // Khởi tạo đối tượng
                exemplarInfo = new ItemObject();
                // Gán giá trị vào đối tượng
                exemplarInfo.ItemCd = item.ItemCd;
                exemplarInfo.ItemName = item.ItemName;
                exemplarInfo.ItemImage = storageFileCom.GetFileName(
                    Logics.LOCALE_DEFAULT,
                    item.FileCd,
                    false);
                exemplarInfo.Link = W150101Pages.CLN_ITEMS_DETAIL + Chars.FSLASH + item.ItemSearchName;
                // Thêm vào đối tượng kết quả
                listDataExemplar.Add(exemplarInfo);
            }
            // Lấy danh sách liên quan
            var listRelated = processDao.GetListRelated(Logics.LOCALE_DEFAULT, dataInfo.ItemCd, dataInfo.ExemplarCd, dataInfo.TypeCd);
            // Khai báo biến dùng trong loop
            ItemObject relatedInfo = null;
            // Duyệt danh sách liên quan
            foreach (var item in listRelated) {
                // Khởi tạo đối tượng
                relatedInfo = new ItemObject();
                // Gán giá trị vào đối tượng
                relatedInfo.ItemCd = item.ItemCd;
                relatedInfo.ItemName = item.ItemName;
                relatedInfo.ItemImage = storageFileCom.GetFileName(
                    Logics.LOCALE_DEFAULT,
                    item.FileCd,
                    false);
                relatedInfo.Link = W150101Pages.CLN_ITEMS_DETAIL + Chars.FSLASH + item.ItemSearchName;
                // Thêm vào đối tượng kết quả
                listDataRelated.Add(relatedInfo);
            }
            // Cập nhật lượt xem
            dataInfo.ViewCount = processDao.UpdateViewCount(Logics.LOCALE_DEFAULT, dataInfo.ItemCd);
            // Gán giá trị trả về
            getResult.DataInfo = dataInfo;
            getResult.ListExemplar = listDataExemplar;
            getResult.ListRelated = listDataRelated;
            // Kết quả trả về
            return getResult;
        }
        #endregion
    }
}
